package com.caregiver.watch.business.user.dao;

import com.caregiver.watch.business.user.model.po.UserAddress;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户收货地址表 Dao 接口
 */
@Mapper
public interface UserAddressDao {
    
    /**
     * 根据ID查询用户地址
     * @param id 地址ID
     * @return 用户地址信息
     */
    UserAddress selectUserAddressById(Long id);
    
    /**
     * 根据用户ID查询地址列表
     * @param userId 用户ID
     * @return 用户地址列表
     */
    List<UserAddress> selectUserAddressListByUserId(Long userId);
    
    /**
     * 查询用户默认地址
     * @param userId 用户ID
     * @return 默认地址
     */
    UserAddress selectUserDefaultAddress(Long userId);
    
    /**
     * 查询用户有效地址列表
     * @param userId 用户ID
     * @return 有效地址列表
     */
    List<UserAddress> selectActiveUserAddressList(Long userId);
    
    /**
     * 插入用户地址
     * @param userAddress 用户地址信息
     * @return 插入结果
     */
    int insertUserAddress(UserAddress userAddress);

    /**
     * 更新所有地址为非默认
     * @param userId 用户ID
     * @return 更新结果
     */
    int updateAllAddressToNotDefault(@Param("userId") Long userId);
    
    /**
     * 更新用户地址
     * @param userAddress 用户地址信息
     * @return 更新结果
     */
    int updateUserAddress(UserAddress userAddress);
    
    /**
     * 更新用户默认地址
     * @param userId 用户ID
     * @param addressId 地址ID
     * @return 更新结果
     */
    int updateDefaultAddress(@Param("userId") Long userId, @Param("addressId") Long addressId);
    
    /**
     * 根据ID删除用户地址(逻辑删除)
     * @param id 地址ID
     * @return 删除结果
     */
    int deleteUserAddressById(@Param("userId") Long userId, @Param("id") Long id);
    
    /**
     * 根据用户ID删除所有地址(逻辑删除)
     * @param userId 用户ID
     * @return 删除结果
     */
    int deleteUserAddressByUserId(Long userId);
    
    /**
     * 检查地址是否存在
     * @param md5 地址MD5
     * @param userId 用户ID
     * @return 是否存在
     */
    boolean checkAddressExists(@Param("userId") Long userId, @Param("md5") String md5);


    /**
     * 批量保存地址
     */
    void batchSaveUserAddress( @Param("userAddresses") List<UserAddress> userAddresses);
}
